// #include <iostream>
// using namespace std;
//
// int main()
//{
//	int a, b;
//	cin >> a >> b;
//	if (a == 1 && b == 0)
//	{
//		cout << "Yes";
//	}
//	else if (b == 0 && a == 1)
//	{
//		cout << "No";
//	}
//	else
//	{
//		cout << "Invalid";
//	}
//	return 0;
// }

// #include <iostream>
// using namespace std;
//
// int main()
//{
//	char AB, AC, BC;
//	cin >> AB >> AC >> BC;
//	char maxchar = 'A';
//	if (AB == '>')
//	{
//		AB = 'A';
//	}
//	else
//	{
//		AB = 'B';
//	}
//	if (AC == '>')
//	{
//		AC = 'A';
//	}
//	else
//	{
//		AC = 'C';
//	}
//	if (AB == 'A' && AC == 'A')
//	{
//		cout << (BC == '>' ? 'B' : 'C');
//	}
//	else if(AB == 'B' && AC == 'C')
//	{
//		cout << (BC == '>' ? 'C' : 'B');
//	}
//	else
//	{
//		cout << 'A';
//	}
//	return 0;
// }

// #include <iostream>
// #include <cstring>
// using namespace std;
//
// #define MAX_N 100
// int A[MAX_N + 5];
// char B[MAX_N + 5];
// bool use[MAX_N + 5];
//
// int main()
//{
//	int n, m;
//	cin >> n >> m;
//	for (int i = 0; i < m; i++) cin >> A[i] >> B[i];
//	memset(use, 0, sizeof use);
//	for (int i = 0; i < m; i++)
//	{
//		if (use[A[i]] || B[i] == 'F')
//		{
//			cout << "No" << endl;
//			continue;
//		}
//		cout << "Yes" << endl;
//		use[A[i]] = true;
//	}
//	return 0;
// }

// #include <iostream>
// #include <cstring>
// using namespace std;
//
// #define MAX_N 200000
// char charset[MAX_N + 5];
// int N, Q;
// int nums = 0;
// void init()
//{
//	for (int i = 0; i < N - 2; i++)
//	{
//		if (charset[i] == 'A')
//		{
//			if (strncmp(charset + i, "ABC", 3) == 0)
//			{
//				nums += 1;
//			}
//		}
//	}
// }
//
// void operate(int pos, char ob)
//{
//	if (charset[pos] == 'A')
//	{
//		if (pos < N - 2)
//		{
//			if (strncmp(charset + pos, "ABC", 3) == 0)
//				nums -= 1;
//		}
//	}
//	else if (charset[pos] == 'B')
//	{
//		if (pos < N - 1 && pos >= 1)
//		{
//			if (strncmp(charset + pos - 1, "ABC", 3) == 0)
//				nums -= 1;
//		}
//	}
//	else if (charset[pos] == 'C')
//	{
//		if (pos < N && pos >= 2)
//		{
//			if (strncmp(charset + pos - 2, "ABC", 3) == 0)
//				nums -= 1;
//		}
//	}
//	charset[pos] = ob;
//	if (charset[pos] == 'A')
//	{
//		if (pos < N - 2)
//		{
//			if (strncmp(charset + pos, "ABC", 3) == 0)
//				nums += 1;
//		}
//	}
//	else if (charset[pos] == 'B')
//	{
//		if (pos < N - 1 && pos >= 1)
//		{
//			if (strncmp(charset + pos - 1, "ABC", 3) == 0)
//				nums += 1;
//		}
//	}
//	else if (charset[pos] == 'C')
//	{
//		if (pos < N && pos >= 2)
//		{
//			if (strncmp(charset + pos - 2, "ABC", 3) == 0)
//				nums += 1;
//		}
//	}
// }
//
// int main()
//{
//	cin >> N >> Q;
//	cin >> charset;
//	init();
//	//cout << nums << endl;
//	int a;
//	char b;
//	//cout << nums << endl;
//	for (int i = 0; i < Q; i++)
//	{
//		cin >> a >> b;
//		operate(a - 1, b);
//		cout << nums << endl;
//	}
//	return 0;
// }

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;

#define MAX_N 200000

int pos[MAX_N + 5];
long long persons[MAX_N + 5];
int logic_pos[MAX_N + 5];
int N, Q;
int main()
{
	cin >> N;
	for (int i = 1; i <= N;i++)
		cin >> pos[i];
	for (int i = 1; i <= N;i++)
		cin >> persons[i];
	for (int i = 1; i <= N;i++)
		logic_pos[i] = i;
	sort(logic_pos + 1, logic_pos + N + 1, [&](int i, int j)
		{
			return pos[i] < pos[j];
		});
	logic_pos[0] = 0;
	persons[0] = 0;
	for (int i = 1; i < N + 1; i++)
	{
		persons[logic_pos[i]] += persons[logic_pos[i - 1]];
	}
	//构建排序后的数组和前缀和数组
	vector<int> profix(N + 1), sort_arr(N + 1);
	profix[0] = 0;
	for (int i = 1; i < N + 1; i++)
	{
		profix[i] = persons[logic_pos[i]];
		sort_arr[i] = pos[logic_pos[i]];
	}

	cin >> Q;
	while (Q--)
	{
		int left, right;
		cin >> left >> right;
		int left_index = lower_bound(sort_arr.begin() + 1, sort_arr.end(), left) - sort_arr.begin();
		int right_index = upper_bound(sort_arr.begin() + 1, sort_arr.end(), right) - sort_arr.begin() - 1;
		if (right_index < left_index)
		{
			cout << 0 << endl;
		}
		else
		{
			cout << profix[right_index] - profix[left_index - 1] << endl;
		}
	}
	return 0;
}

// #include <iostream>
// #include <vector>
// using namespace std;
// #define MAX_N 200000
//
// int main()
//{
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//	int n;
//	cin >> n;
//	vector<vector<int>> hash(n + 1);
//	for (int i = 0, a;i < n; i++)
//	{
//		cin >> a;
//		hash[a].push_back(i);
//	}
//	for (int i = 1; i <= n; i++)
//	{
//		hash[i].push_back(n);
//	}
//	long long ans = 0;
//	for (int i = 1; i <= n; i++)
//	{
//		int l = 0, j;
//		for (j = 0; j < hash[i].size(); j++)
//		{
//			ans += (hash[i][j] - l + 1) * (n - hash[i][j]);
//		}
//		l = hash[i][j] + 1;
//	}
//	cout << ans;
//	return 0;
// }

// #include <iostream>
// #include <string>
// #include <vector>
// using namespace std;

// int main()
// {
//     ios::sync_with_stdio(0);
//     cin.tie(0);
//     cout.tie(0);
//     string S, T;
//     vector<string> ans;
//     cin >> S >> T;
//     for (size_t i = 0; i < S.size(); i++)
//     {
//         if (S[i] > T[i])
//         {
//             S[i] = T[i];
//             ans.push_back(S);
//         }
//     }
//     for (int i = S.size() - 1; i >= 0; i--)
//     {
//         if (S[i] < T[i])
//         {
//             S[i] = T[i];
//             ans.push_back(S);
//         }
//     }
//     for (auto x : ans)
//         cout << x << endl;
//     return 0;
// }